package is1;

import java.io.FileInputStream;
import java.util.Properties;

public class ConfiguradorTXT extends Configurador {
	private Properties propiedades;
	
	private ConfiguradorTXT() throws ExcepcionTPV
	{
		if (rutaFichero.isEmpty())
		{
			throw new ExcepcionTPV("No se ha establecido rutaFichero con la ruta de .properties");
		}
		
		// Cargamos el fichero con las propiedades
		propiedades = new Properties();
		try 
		{
			propiedades.load(new FileInputStream(rutaFichero));
		} 
		catch (Exception e) 
		{ 
			System.err.println("Ha ocurrido una excepcion al abrir el fichero, no se encuentra o está protegido en Configurador.crear()"); 
		}
	}
	
	public void configurar() 
	{
		try 
		{
			// Asignar propiedades de catalogos
			Catalogos catalogos = Catalogos.getInstance();
			Catalogo c = new CatalogoCVS( propiedades.getProperty("Catalogo.URL") );
			catalogos.addCatalogo(c);
			catalogos.setTamCache(Integer.parseInt( propiedades.getProperty("Catalogo.numItemsMemoria") ));
			catalogos.cargarDatos();
			
			// Asignar propiedades de impuestos
			CalculadoraImpuestos.setInstance(CalculadoraREST.getInstance());
			CalculadoraImpuestos.getInstance().setURL( propiedades.getProperty("CalculadoraImpuestos.URI") );
			
			// Asignar propiedades de descuentos
			AplicarDescuentoAcumulativo.setStrategy(); // Aplicar por defecto por si acaso
			if (propiedades.getProperty("DescuentosAplicables.politicaAplicacion").equals("NO_ACUMULABLE"))
				AplicarDescuentoNoAcumulativo.setStrategy();
			else if (propiedades.getProperty("DescuentosAplicables.politicaAplicacion").equals("ACUMULABLE"))
				AplicarDescuentoAcumulativo.setStrategy();
			
			
			float dtoTarjetaFid = Float.parseFloat( propiedades.getProperty("DctoTarjetaFid.porcentaje") );
			AplicarDescuento.addDescuento(new DescuentoAtributo(dtoTarjetaFid, new AtributoTarjetaFidelidad()));
			
			float dtoEmpleado = Float.parseFloat( propiedades.getProperty("DctoEmpleado.porcentaje") );
			AplicarDescuento.addDescuento(new DescuentoAtributo(dtoEmpleado, new AtributoEmpleado()));
			
			float descuento = Float.parseFloat( propiedades.getProperty("DctoMiercoles.porcentaje") );
			Fecha inicio = new Fecha(Fecha.Dia.Miercoles, Integer.parseInt( propiedades.getProperty("DctoMiercoles.horaInicio") ), 0);
			Fecha fin = new Fecha(Fecha.Dia.Miercoles, Integer.parseInt( propiedades.getProperty("DctoMiercoles.horaFin") ), 0);
			Intervalo inter = new Intervalo(inicio, fin);
			AplicarDescuento.addDescuento(new DescuentoFranjaHoraria(descuento, inter));
			
			SalidaXML.setInstance(rutaSalida);
		} 
		catch (Exception e) 
		{ 
			System.err.println("Ha ocurrido una excepcion al obtener las propiedades en Configurador.configurar()");
		}
	}
	
	@Override
	public String toString() {
		return "ConfiguradorTXT [propiedades=" + propiedades + "]";
	}

	public static void setInstance(Configurador c)
	{
		configurador = c;
	}
	
	public static Configurador getInstance() throws ExcepcionTPV
	{
		if (configurador == null)
		{
			configurador = new ConfiguradorTXT();
		}
		return configurador;
	}
}
